package main.java;

/**
 * @program: pratice
 * @author: 关键我是大怪
 * @create: 2021-10-03 19:53
 */

import java.util.HashSet;
import java.util.Stack;

/**
 * 题目：
 * 根据 逆波兰表示法，求该后缀表达式的计算结果。
 * 有效的算符包括 +、-、*、/ 。每个运算对象可以是整数，也可以是另一个逆波兰表达式。
 * <p>
 * 示例：
 * 输入：tokens = ["2","1","+","3","*"]
 * 输出：9
 * 解释：该算式转化为常见的中缀算术表达式为：((2 + 1) * 3) = 9
 */

public class Test49_后缀表达式 {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        HashSet<String> set = new HashSet<>(4);
        set.add("+");
        set.add("-");
        set.add("*");
        set.add("/");
        for (String s : tokens) {
            if (set.contains(s)) {
                Integer a = stack.pop();
                Integer b = stack.pop();
                int res;
                if (s.equals("+")) {
                    res = b + a;
                } else if (s.equals("-")) {
                    res = b - a;
                } else if (s.equals("*")) {
                    res = b * a;
                } else {
                    res = b / a;
                }
                stack.push(res);
            } else {
                stack.push(Integer.valueOf(s));
            }
        }
        return stack.pop();
    }
}
